#pragma once
namespace HD
{
	template <class T, class Container = vector<T>>
	class stack
	{
		Container _con;

		typedef T value_type;
		typedef size_t size_type;
	public:
		void push(const value_type& val);
		void pop()
		{
			_con.pop_back();
		}
		value_type& top()
		{
			return _con.back();
		}
		const value_type& top()const
		{
			return _con.back();
		}
		size_type size()const
		{
			return _con.size();
		}
		bool empty()const
		{
			return _con.empty();
		}
	};
	template<class T, class Container>
	typename void stack<T, Container>::push(const stack<T, Container>::value_type& val)
	{
		_con.push_back(val);
	}
}

